package com.ip.common.utils;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.concurrent.atomic.AtomicInteger;

/**
 * 工单号生成工具类
 * 工单号格式：前缀(WO) + 日期(YYYYMMDD) + 当日序列号(001)
 * 示例：WO20240908001
 */
public class WorkOrderNumberUtils {
    
    /**
     * 序列号生成器，使用AtomicInteger保证线程安全
     * 每个日期对应一个序列号生成器
     */
    private static final AtomicInteger sequence = new AtomicInteger(0);
    
    /**
     * 上次生成工单号的日期，用于判断是否需要重置序列号
     */
    private static volatile String lastDate = "";
    
    /**
     * 生成工单号
     * 格式：WO + 日期(YYYYMMDD) + 三位序列号(001开始)
     * 
     * @return 工单号字符串
     */
    public static synchronized String generateWorkOrderNumber() {
        // 获取当前日期
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
        String currentDate = dateFormat.format(new Date());
        
        // 检查是否需要重置序列号（日期变化时）
        if (!currentDate.equals(lastDate)) {
            sequence.set(0);
            lastDate = currentDate;
        }
        
        // 获取并增加序列号
        int currentSequence = sequence.incrementAndGet();
        
        // 格式化工单号：前缀 + 日期 + 三位序列号
        return String.format("WO%s%03d", currentDate, currentSequence);
    }
    
    /**
     * 生成订单号
     * 格式：WO + 日期(YYYYMMDD) + 三位序列号(001开始)
     * 
     * @return 订单号字符串
     */
    public static synchronized String generateOrderNumber() {
        // 复用工单号生成逻辑，统一使用WO前缀
        return generateWorkOrderNumber();
    }
}